#include "stdafx.h"
#include "TokenManager.h"

CTokenManager::CTokenManager()
{
	m_keyWords.insert(pair<CToken, string>(CToken::CLASS, "class"));
	m_keyWords.insert(pair<CToken, string>(CToken::FUNCTION, "function"));
	m_keyWords.insert(pair<CToken, string>(CToken::CONSTRUCTOR, "constructor"));
    m_keyWords.insert(pair<CToken, string>(CToken::THIS, "this"));
	m_keyWords.insert(pair<CToken, string>(CToken::MAIN, "main"));
	m_keyWords.insert(pair<CToken, string>(CToken::RETURN, "return"));
	m_keyWords.insert(pair<CToken, string>(CToken::ARRAY, "Array"));
	m_keyWords.insert(pair<CToken, string>(CToken::INT, "Int"));
	m_keyWords.insert(pair<CToken, string>(CToken::IF, "if"));
	m_keyWords.insert(pair<CToken, string>(CToken::ELSE, "else"));
	m_keyWords.insert(pair<CToken, string>(CToken::WHILE, "while"));
	m_keyWords.insert(pair<CToken, string>(CToken::PRINT, "print"));
	m_keyWords.insert(pair<CToken, string>(CToken::NEW, "new"));
	m_keyWords.insert(pair<CToken, string>(CToken::END, "end"));
	m_keyWords.insert(pair<CToken, string>(CToken::ASSIGN, "="));
	m_keyWords.insert(pair<CToken, string>(CToken::DELIMETER, "$"));
	m_keyWords.insert(pair<CToken, string>(CToken::SEMICOLON, ";"));
	m_keyWords.insert(pair<CToken, string>(CToken::LESS, "<"));
	m_keyWords.insert(pair<CToken, string>(CToken::COLON, ":"));
	m_keyWords.insert(pair<CToken, string>(CToken::POINT, "."));
	m_keyWords.insert(pair<CToken, string>(CToken::DIV, "/"));
	m_keyWords.insert(pair<CToken, string>(CToken::LESSOREQUAL, "<="));
	m_keyWords.insert(pair<CToken, string>(CToken::AND, "&&"));
	m_keyWords.insert(pair<CToken, string>(CToken::OR, "||"));
	m_keyWords.insert(pair<CToken, string>(CToken::COMMA, ","));
	m_keyWords.insert(pair<CToken, string>(CToken::NOT, "!"));
	m_keyWords.insert(pair<CToken, string>(CToken::ADD, "+"));
	m_keyWords.insert(pair<CToken, string>(CToken::SUB, "-"));
	m_keyWords.insert(pair<CToken, string>(CToken::MUL, "*"));
	m_keyWords.insert(pair<CToken, string>(CToken::EQUAL, "=="));
	m_keyWords.insert(pair<CToken, string>(CToken::LFIGUREBRACKET, "{"));
	m_keyWords.insert(pair<CToken, string>(CToken::RFIGUREBRACKET, "}"));
	m_keyWords.insert(pair<CToken, string>(CToken::LROUNDBRACKET, "("));
	m_keyWords.insert(pair<CToken, string>(CToken::RROUNDBRACKET, ")"));
    m_keyWords.insert(pair<CToken, string>(CToken::LSQUAREBRACKET, "["));
    m_keyWords.insert(pair<CToken, string>(CToken::RSQUAREBRACKET, "]"));

	m_keyWords.insert(pair<CToken, string>(CToken::ID, "ID"));
	m_keyWords.insert(pair<CToken, string>(CToken::INT_LITERAL, "INT_LITERAL"));
	m_keyWords.insert(pair<CToken, string>(CToken::EOF_TOKEN, "EOF"));
}

bool CTokenManager::IsKeyWord(string keyWord)
{
	for (map<CToken, string>::iterator it = m_keyWords.begin(); it != m_keyWords.end(); ++it)
	{
		if (it->second == keyWord)
		{
			return true;
		}
	}

	return false;
}

CToken CTokenManager::GetToken(string keyWord)
{
	CToken retVal;
	for (map<CToken, string>::iterator it = m_keyWords.begin(); it != m_keyWords.end(); ++it)
	{
		if (it->second == keyWord)
		{
			retVal = it->first;
		}
	}

	return retVal;
}

string CTokenManager::TokenToString(CToken token)
{
	return m_keyWords[token];
}